/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "框架/工作区/节点视口/节点构建.h"


C_节点面板* f_节点构建_几何网格(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何网格(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何平面(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何平面(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何球体(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node = 0, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何球体(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何矩形(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何矩形(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何圆柱(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何圆柱(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何圆锥(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何圆锥(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_L板(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_L板(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何曲线(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何曲线(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_线框立方体(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_线框立方体(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_几何(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何ID(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_几何ID(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_当前多边形(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_当前多边形(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_基本多边形(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_基本多边形(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_编辑网格(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_编辑网格(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_网格体素(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_网格体素(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_网格采样(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_网格采样(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_计算网格法线(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_计算网格法线(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_网格属性(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_网格属性(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_截取网格(S_UI渲染环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_截取网格(C_节点面板* plane, C_节点基类* node);
C_节点面板* f_节点构建_网格选择(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_网格选择(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_填充网格顶点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_填充网格顶点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_填充网格纹理坐标(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_填充网格纹理坐标(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_面朝向(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_面朝向(C_节点面板* plane, C_节点基类* node);

//C_节点面板* f_节点构建_设置材质ID(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
//void		f_节点重置_设置材质ID(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_多边形边(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形边(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形面(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形面(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_添加多边形纹理坐标(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_添加多边形纹理坐标(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_添加多边形元素(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_添加多边形元素(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_投影多边形纹理坐标(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_投影多边形纹理坐标(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形添加顶点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形添加顶点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形删除顶点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形删除顶点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取多边形索引节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形索引节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取多边形面顶点节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形面顶点节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取多边形元素(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形元素(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取多边形顶点元素(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形顶点元素(C_节点面板* plane, C_节点基类* node);



C_节点面板* f_节点构建_设置多边形面属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置多边形面属性节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置多边形面顶点节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置多边形面顶点节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置多边形面UV节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置多边形面UV节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置面材质槽ID节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置面材质槽ID节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形复制节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形复制节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形拷贝节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形拷贝节点(C_节点面板* plane, C_节点基类* node);
//C_节点面板* f_节点构建_投影纹理坐标节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
//void		f_节点重置_投影纹理坐标节点(C_节点面板* plane, C_节点基类* node);
C_节点面板* f_节点构建_多边形变换节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形变换节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_多边形桥接节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形桥接节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_点桥接节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_点桥接节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形边采样节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形边采样节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_边网格化节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_边网格化节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形转网格节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形转网格节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_多边形边实体化节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_多边形边实体化节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取多边形边节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形边节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取网格元素节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取网格元素节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_取网格元素顶点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取网格元素顶点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_创建网格自定义属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_创建网格自定义属性节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置网格自定义属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置网格自定义属性节点(C_节点面板* plane, C_节点基类* node);




C_节点面板* f_节点构建_设置网格元素顶点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置网格元素顶点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置平滑模式(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_设置平滑模式(C_节点面板* plane, C_节点基类* node);



bool f_几何网格节点重构(C_节点面板** plane, C_节点基类* node, S_UI渲染环境* ctx);


void f_网格节点_构建函数初始化();



//======================= 废弃 ================================
C_节点面板* f_节点构建_取多边形面属性节点(S_UI渲染环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr, const std::u16string& name = u"");
void		f_节点重置_取多边形面属性节点(C_节点面板* plane, C_节点基类* node);


